<?php
class EmpresaBehavior extends CActiveRecordBehavior {
	private $owner;
	/**
	 * Obtiene el nombre de la empresa padre.
	 * @return string nombre de la empresa padre.
	 */
	public function obtenerNombreEmpresaPadre() {
		$this->owner = $this->getOwner();
		$empresa_padre=$this->owner->empresaPadre;
		if($empresa_padre){
			return $empresa_padre->razon_social;
		}
		return "Ninguna";
	}	
	
	/**
	 * Obtiene la lista de usuarios de la empresa.
	 * @return array lista de usuarios.
	 */
	public function obtenerListaUsuarios() {
		$this->owner = $this->getOwner();
		
		$command=Yii::app()->db->createCommand("SELECT u.*  FROM `usuario` u INNER JOIN `usuario_empresa` ue ON ue.usuario_id = u.id WHERE ue.empresa_id = :empresa_id");
		$command->setFetchMode(PDO::FETCH_OBJ);
		$command->bindParam(":empresa_id",$this->owner->id,PDO::PARAM_INT);
		return $command->queryAll();
	}
	/**
	 * Obtiene el primer y único administrador.
	 * @return Usuario primer administrador.
	 */
	public function obtenerPrimerAdministrador() {
		$this->owner = $this->getOwner();
		$id=$this->owner->id;
		/*
		$command=Yii::app()->db->createCommand("SELECT u.*  FROM `usuario` u INNER JOIN `usuario_empresa` ue ON ue.usuario_id = u.id WHERE ue.empresa_id = :empresa_id AND u.es_primer_administrador=1 LIMIT 1");
		$command->setFetchMode(PDO::FETCH_OBJ);
		$command->bindParam(":empresa_id",$id,PDO::PARAM_INT);
		$usuario= $command->queryRow();
		*/
		$usuario=Usuario::model()->findBySql("SELECT u.*  FROM `usuario` u INNER JOIN `usuario_empresa` ue ON ue.usuario_id = u.id WHERE ue.empresa_id = :empresa_id AND u.es_primer_administrador=1 LIMIT 1", array(
			':empresa_id'=>(int)$id,
		));
		
		return $usuario;
	}
	
	/**
	 * Obtiene los usuarios de la empresa.
	 * @return array Lista de usuarios de la empresa.
	 */
	public function obtenerUsuarios() {
		$this->owner = $this->getOwner();
		$id=$this->owner->id;
		$usuarios=Usuario::model()->findAllBySql("SELECT u.*  FROM `usuario` u INNER JOIN `usuario_empresa` ue ON ue.usuario_id = u.id WHERE ue.empresa_id = :empresa_id AND u.activo=1", array(
			':empresa_id'=>(int)$id,
		));
		
		return $usuarios;
	}
	/**
	 * Obtiene los usuarios de la empresa.
	 * @return array Lista de usuarios de la empresa.
	 */
	public function obtenerEmpresasDependientes() {
		$this->owner = $this->getOwner();
		$id=$this->owner->id;
		$empresas=Empresa::model()->findAllBySql("SELECT e.*  FROM `empresa` e WHERE e.empresa_padre_id = :empresa_id AND e.activo=1", array(
			':empresa_id'=>(int)$id,
		));
		
		return $empresas;
	}
	
	/**
	 * Obtiene los usuarios de la empresa.
	 * @return array Lista de usuarios de la empresa.
	 */
	public function eliminarEmpresaYDependientes() {
		$model = $this->getOwner();
		$id=$model->id;
		
		
		
		$usuarios=$model->obtenerUsuarios();
		
		
		foreach ($usuarios as $usuario) {
			/*
			//Mejor no se revocan los derechos para que quede el histórico
			$roles=Rights::getAssignedRoles($usuario->id);
			foreach($roles as $role) // for multiple role
			{
				Rights::revoke($role->name, $usuario->id);
			}
			*/
			$usuario->activo=0;
			$usuario->save(false);			
		}
		
		$empresas=$model->obtenerEmpresasDependientes();
		
		foreach ($empresas as $empresa) {
			$empresa->eliminarEmpresaYDependientes();
		}
		
		//$primerAdministrador=$model->obtenerPrimerAdministrador();
		$model->activo=0;
		$model->save(false);
		//$primerAdministrador->activo=0;
		//$primerAdministrador->save(false);
		
		
		
		
	}	
	
	
	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function searchPorEmpresa()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.
		$owner = $this->getOwner();
		
		$criteria=new CDbCriteria;
	
		$criteria->compare('activo',1);
		$criteria->compare('razon_social',$owner->razon_social,true);
		$criteria->compare('nit',$owner->nit,true);
		$criteria->compare('telefono',$owner->telefono,true);
		$criteria->compare('representante_legal',$owner->representante_legal,true);
		$criteria->compare('correo_representante_legal',$owner->correo_representante_legal,true);
		$criteria->compare('celular',$owner->celular,true);
	
		$empresa=UsuarioHelper::obtenerEmpresaUsuarioAutenticado();
		if($empresa){
			$criteria->compare('empresa_padre_id',$empresa->id);
		}else{
			//$criteria->compare('empresa_padre_id',$this->empresa_padre_id);
			$criteria->addCondition('empresa_padre_id is null');
		}
		return new CActiveDataProvider($owner, array(
				'criteria'=>$criteria,
		));
	}
	
	
}